IfcOpenShell to biblioteka oprogramowania typu open source (LGPL 3), która pomaga programistom pracować z formatem plików industry foundation classes (IFC). Format pliku IFC może być używany do opisywania danych budowlanych. Format ten jest powszechnie używany do modelowania informacji o budynku (BIM), na przykład do analizy obciążeń mechanicznych oraz badań termicznych i efektywności energetycznej. IfcOpenShell jest przede wszystkim zbiorem bibliotek C++, jednak ponieważ posiada powiązania ze środowiskiem Python, może być zintegrowany z programami takimi jak FreeCAD i Blender.
IfcOpenShell używa OpenCASCADE wewnętrznie do konwersji niejawnej geometrii w plikach IFC na geometrię jawną, którą mogą zrozumieć inne pakiety CAD, na przykład STEP, OBJ i DAE.
Od wersji 0.19 program FreeCAD potrafi importować pliki IFC, o ile w systemie dostępny jest moduł ifcopenshell Pythona. Podobnie środowisko pracy BIM umożliwia eksport modelu budynku do formatu IFC, dzięki czemu może on być używany w innych aplikacjach.
Aby sprawdzić, czy IfcOpenShell jest zainstalowany w systemie, spróbuj zaimportować go z poziomu konsoli Pythona. Biblioteka jest poprawnie zainstalowana, jeśli nie pojawi się żaden komunikat o błędzie.
import ifcopenshell
IfcOpenShell można zainstalować na różne sposoby w zależności od systemu operacyjnego i środowiska Python. W przeszłości instalacja IfcOpenShell była dość trudna, ponieważ należało skompilować go dla konkretnego systemu; jednak w chwili pisania tego tekstu (2020) rozpoczęcie pracy z nim jest łatwiejsze, ponieważ w wielu dystrybucjach FreeCAD jest on już dołączony do FreeCAD. Ogólnie zaleca się korzystanie z jednej z takich wstępnie skompilowanych dystrybucji, a samodzielną kompilację pozostawić jedynie zaawansowanym użytkownikom.
Strona instalacyjna IfcOpenShell: https://docs.ifcopenshell.org/ifcopenshell-python/installation.html
Najłatwiejszym sposobem instalacji IfcOpenShell jest użycie pip. Gdy pip jest już zainstalowany w systemie, możesz zainstalować IfcOpenShell w prosty sposób, wydając w oknie terminala polecenie:
pip install ifcopenshell
W systemach Windows i MacOS dystrybucje FreeCAD przygotowane z menedżerem pakietów Conda zazwyczaj zawierają już IfcOpenShell, więc dodatkowa instalacja nie jest konieczna. Pobierz odpowiednią dystrybucję ze strony Pobieranie.
AppImage dla systemu Linux również jest oparty na Conda i także zawiera IfcOpenShell.
Jeśli jest dostępny, możesz zainstalować IfcOpenShell za pomocą menedżera pakietów swojej dystrybucji.
sudo apt install ifcopenshell
Należy jednak zauważyć, że pakiety udostępniane w wielu repozytoriach Linuksa bywają stare i mogą nie zawierać najnowszych zmian w oprogramowaniu. Jeśli chcesz mieć pewność, że używasz najnowszej wersji, skorzystaj z dystrybucji FreeCAD opartej na Conda, wstępnie skompilowanej dystrybucji IfcOpenShell lub skompiluj IfcOpenShell samodzielnie.
Kompilacja IfcOpenShell jest zalecana tylko dla zaawansowanych użytkowników. Proces jest podobny do kompilacji FreeCAD w systemie Linux, więc jeśli robiłeś to wcześniej, prawdopodobnie masz już niezbędne elementy, takie jak pliki developerskie OpenCASCADE. Proces wykorzystuje narzędzie konfiguracyjne CMake do wygenerowania niestandardowego Makefile do użycia z narzędziem Make.
Ogólne instrukcje znajdują się w repozytorium IfcOpenShell i przedstawiają się następująco:
IfcConvert.cmake, aby wygenerować Makefile, a następnie rozpocznij kompilację, wydając polecenie make.ifcopenshell Pythona w odpowiednim katalogu site-packages/, tak aby został wykryty przez FreeCAD.Uwaga: poniższe przykłady zakładają system oparty na Debian/Ubuntu, ale ogólna procedura powinna działać również w innych systemach operacyjnych. Na przykład w Debianie biblioteki współdzielone zwykle znajdują się w /usr/lib/x86_64-linux-gnu/, podczas gdy w innych dystrybucjach może to być /usr/lib64/, więc ścieżki należy dostosować odpowiednio.
Zainstaluj podstawowe narzędzia kompilacyjne.
sudo apt install git cmake gcc g++ libboost-all-dev
Uzyskaj kod źródłowy projektu i umieść go w katalogu użytkownika, w którym masz pełne prawa do zapisu.
Na dzień pisania tego tekstu (2020) gałąź master projektu IfcOpenShell nie zawiera najnowszego kodu, dlatego należy sklonować konkretną gałąź.
git clone https://github.com/IfcOpenShell/IfcOpenShell -b v0.6.0 IfcOpenShell-source
Zainstaluj pliki deweloperskie OpenCASCADE.
sudo apt install libocct*-dev
Co rozszerza się na
sudo apt install libocct-data-exchange-dev libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev
Można również użyć edycji społecznościowej (OCE) OpenCASCADE, jednak należy pamiętać, że ta wersja jest przestarzała i od 2020 roku nie jest już zalecana przez FreeCAD.
Zainstaluj pliki deweloperskie OpenCOLLADA.
sudo apt install opencollada-dev
Jeżeli pliki w twojej dystrybucji są zbyt stare, możesz także skompilować biblioteki samodzielnie. Procedura jest opisana w głównym repozytorium, KhronosGroup/OpenCOLLADA, i jest bardzo prosta, ponieważ wymaga jedynie plików deweloperskich libpcre3 i libxml2.
sudo apt install libpcre3-dev libxml2-dev
git clone https://github.com/KhronosGroup/OpenCOLLADA OpenCOLLADA-source
mkdir -p OpenCOLLADA-build
cd OpenCOLLADA-build
cmake ../OpenCOLLADA-source
make -j 3
sudo make install
Do użycia z FreeCAD potrzebny jest wrapper Pythona, który wykorzystuje SWIG do wygenerowania odpowiednich interfejsów z klas C++.
sudo apt-get install python-all-dev swig
Zaleca się wykonywanie konfiguracji i kompilacji w osobnym katalogu build, oddzielonym od katalogu źródłowego.
mkdir -p IfcOpenShell-build
cd IfcOpenShell-build
cmake ../IfcOpenShell-source/cmake/
Należy pamiętać, że plik CMakeLists.txt, który steruje pracą CMake, znajduje się w podkatalogu cmake/ w katalogu źródłowym.
W zależności od używanej dystrybucji Linuksa i sposobu instalacji zależności, może być konieczne zdefiniowanie niektórych zmiennych CMake, aby biblioteki zostały poprawnie odnalezione.
Jeżeli samodzielnie skompilowałeś OpenCASCADE lub biblioteki nie znajdują się w standardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych.
cmake \
-DOCC_INCLUDE_DIR=/usr/include/opencascade \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
../IfcOpenShell-source/cmake/
Domyślnie system kompilacji oczekuje edycji społecznościowej (OCE) OpenCASCADE (/usr/include/oce/), jednak należy pamiętać, że ta wersja jest przestarzała i od 2020 roku nie jest już zalecana przez FreeCAD. Z tego powodu zaleca się instalację plików developerskich głównej wersji OpenCASCADE (OCCT).
Jeżeli nie potrzebujesz obsługi OpenCOLLADA (plików DAE), należy ją wyłączyć jawnie za pomocą zmiennej COLLADA_SUPPORT.
cmake \
...
-DCOLLADA_SUPPORT=FALSE \
../IfcOpenShell-source/cmake/
Jeżeli samodzielnie skompilowałeś OpenCOLLADA lub biblioteki nie znajdują się w standardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych dla OpenCOLLADA oraz biblioteki libpcre.
cmake \
...
-DOPENCOLLADA_INCLUDE_DIR=/usr/include/opencollada \
-DOPENCOLLADA_LIBRARY_DIR=/usr/lib/opencollada \
-DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
../IfcOpenShell-source/cmake/
Jeżeli biblioteki libxml2 nie zostaną znalezione podczas kompilacji i linkowania, lub jeśli znajdują się w niestandardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych.
cmake \
...
-DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so \
../IfcOpenShell-source/cmake/
Domyślnie moduł Python ifcopenshell zostanie zainstalowany w systemowym katalogu site-packages/, co wymaga uprawnień administratora. Ustawiając zmienną USERSPACE_PYTHON_PREFIX, instalacja modułu Python zostanie przeprowadzona w katalogu domowym użytkownika.
cmake \
...
-DUSERSPACE_PYTHON_PREFIX=ON \
../IfcOpenShell-source/cmake/
Jeżeli chcesz wygenerować powiązanie dla konkretnej wersji Pythona, ustaw zmienną PYTHON_EXECUTABLE na odpowiedni plik wykonywalny. Pamiętaj, że wersja ta musi być taka sama, jak wersja Pythona, względem której skompilowano FreeCAD.
cmake \
...
-DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
../IfcOpenShell-source/cmake/
W typowym systemie Debian/Ubuntu możesz użyć tej linii do skonfigurowania kompilacji. Dostosuj ją w razie potrzeby.
cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/
Bez OpenCOLLADA:
cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DCOLLADA_SUPPORT=FALSE -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/
Jeżeli podczas konfiguracji za pomocą CMake nie pojawiły się żadne komunikaty o błędach, w katalogu build powinien zostać utworzony Makefile, dzięki czemu możesz przystąpić do kompilacji bibliotek, wydając polecenie make.
make -j N
N to liczba procesorów przypisana do procesu kompilacji; wybierz co najmniej o jeden mniej niż całkowita liczba rdzeni CPU, które posiadasz.
Wszystkie opcje konfiguracji znajdują się w pliku CMakeLists.txt w katalogu IfcOpenShell-source/cmake/. Jeśli pojawią się problemy podczas uruchamiania CMake lub Make, zajrzyj tam, aby sprawdzić inne opcje, które mogą wymagać ustawienia.
We wszystkich powyższych instrukcjach zamiast cmake można użyć graficznego interfejsu cmake-gui. Pozwoli to szybko zobaczyć dostępne opcje konfiguracji.
cmake-gui ../IfcOpenShell-source/cmake/
Jeżeli kompilacja zakończyła się sukcesem, powinien powstać podkatalog examples/ z nowo skompilowanym plikiem wykonywalnym IfcOpenHouse. Uruchom to narzędzie z katalogu build, aby wygenerować przykładowy plik IFC.
example/IfcOpenHouse
Przykładowy plik IFC powinien pojawić się w katalogu build i może być użyty jako wejście dla również nowo skompilowanego pliku wykonywalnego IfcConvert. To narzędzie przyjmuje jako wejście plik IFC i generuje na wyjściu różne formaty, w tym OBJ, DAE (jeśli włączono obsługę OpenCOLLADA), STEP, IGS, XML, SVG lub inny plik IFC.
./IfcConvert IfcOpenHouse.ifc
Jeżeli nie zostanie podany plik wyjściowy, domyślnie zostanie utworzony plik OBJ wraz z odpowiadającą mu tabelą materiałów (MTL).
Jeżeli kompilacja nie zgłosiła żadnych błędów, możesz uruchomić make install, aby skopiować nagłówki, skompilowane biblioteki oraz pliki wykonywalne do odpowiednich katalogów instalacyjnych.
sudo make install
Domyślnie CMAKE_INSTALL_PREFIX jest ustawiony na /usr/local/, więc wszystkie skompilowane pliki zostaną umieszczone w tym katalogu, co zazwyczaj wymaga uprawnień administratora.
/usr/local/bin/IfcConvert
/usr/local/bin/IfcGeomServer
/usr/local/include/ifcparse/*.h
/usr/local/include/ifcgeom/*.h
/usr/local/include/ifcgeom_schema_agnostic/*.h
/usr/local/include/serializers/{*.h,*.cpp}
/usr/local/include/serializers/schema_dependent/{*.h,*.cpp}
/usr/local/lib/libIfcGeom*.a
/usr/local/lib/libIfcParse.a
/usr/local/lib/libSerializers*.a
Moduł Pythona ifcopenshell, wymagany przez FreeCAD, nie znajduje się faktycznie w katalogu build; pakiet ten jest tworzony dopiero po uruchomieniu make install. Powstały pakiet jest umieszczany w katalogu site-packages/ lub w katalogu dist-packages/ w dystrybucjach Debian/Ubuntu.
/usr/lib/python3/dist-packages/ifcopenshell/
Jeżeli zmienna USERSPACE_PYTHON_PREFIX została ustawiona podczas konfiguracji CMake, moduł ifcopenshell zostanie umieszczony w katalogu site-packages/ użytkownika.
$HOME/.local/lib/python3.6/site-packages/ifcopenshell/
Aby usunąć zainstalowane biblioteki, wystarczy usunąć odpowiadające im pliki oraz katalog ifcopenshell/ wraz ze wszystkimi modułami w nim zawartymi.
sudo rm -rf /usr/local/bin/IfcConvert
sudo rm -rf /usr/local/bin/IfcGeomServer
sudo rm -rf /usr/local/include/ifcparse/
sudo rm -rf /usr/local/include/ifcgeom/
sudo rm -rf /usr/local/include/ifcgeom_schema_agnostic/
sudo rm -rf /usr/local/lib/libIfcGeom*
sudo rm -rf /usr/local/lib/libIfcParse*
sudo rm -rf /usr/local/lib/libSerializers*
sudo rm -rf /usr/lib/python3/dist-packages/ifcopenshell/
Lub, jeśli zmienna USERSPACE_PYTHON_PREFIX była ustawiona.
sudo rm -rf $HOME/.local/lib/python3.6/site-packages/ifcopenshell/
Kompilacja całej dystrybucji IfcOpenShell generuje pliki wykonywalne, takie jak IfcConvert i IfcGeomServer, a także wiele bibliotek statycznych (lib*.a) w katalogu build. Jednak dla FreeCAD potrzebny jest jedynie moduł Python ifcopenshell. Moduł ten nie jest pojedynczym plikiem, lecz "pakietem", czyli katalogiem zawierającym różne pliki. Pakiet ifcopenshell jest tworzony z wrapperów Pythona zbudowanych w katalogu IfcOpenShell-build/ifcwrap/ oraz z modułów Pythona znajdujących się w oryginalnym katalogu źródłowym IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/.
../IfcOpenShell-build/ifcwrap/ifcopenshell_wrapper.py
../IfcOpenShell-build/ifcwrap/_ifcopenshell_wrapper.so
../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
Moduł ifcopenshell jest tworzony poprzez skopiowanie oryginalnego katalogu źródłowego i dodanie do niego dwóch plików *ifcopenshell_wrapper*.
cp -rt . ../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
cp -t ifcopenshell/ ifcwrap/ifcopenshell_wrapper.py ifcwrap/_ifcopenshell_wrapper.so
Teraz ten katalog można przenieść do katalogu site-packages/ użytkownika lub systemowego (dist-packages/ w Debian/Ubuntu), aby był dostępny dla wszystkich aplikacji Python.
mv -t $HOME/.local/lib/python3.6/site-packages/ ifcopenshell/
Lub dla instalacji dla całego systemu:
sudo mv -t /usr/lib/python3/dist-packages/ ifcopenshell/
Teraz moduł ifcopenshell powinien być dostępny do zaimportowania z konsoli Pythona.
>>> import ifcopenshell
>>> print(ifcopenshell.version)
0.6.0b0
>>> print(ifcopenshell.__path__)
['/home/user/.local/lib/python3.6/site-packages/ifcopenshell']
Biblioteka IfcOpenShell zawiera w rzeczywistości mały graficzny przeglądarka plików IFC, która wykorzystuje PyQt5 oraz PythonOCC.
Aby uruchomić tę przeglądarkę z poziomu konsoli Python, należy utworzyć instancję klasy application i ją uruchomić:
from ifcopenshell.geom.app import application
application().start()
Jeżeli biblioteka jest już zainstalowana, cały moduł można również uruchomić z terminala:
python3 /home/user/.local/lib/python3.6/site-packages/ifcopenshell/geom/app.py
W chwili pisania tego tekstu (2020) obsługiwana była jedynie wersja PythonOCC skompilowana dla edycji społecznościowej OpenCASCADE (OCE).
Projekt IfcOpenShell opracował również "IFC Pipeline", samodzielny program do przetwarzania i wizualizacji plików IFC. Udostępnia on także małą aplikację webową, która przyjmuje przesyłane pliki i może być używana przez każdego. Oznacza to, że do wizualizacji danych IFC nie jest konieczne lokalne zainstalowanie IfcOpenShell ani innych przeglądarek - wystarczy załadować plik IFC do tego systemu, aby zobaczyć wynik.
Wiązania